﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using radnaVerzija.Interfejsi;
using MySql.Data.MySqlClient;

namespace radnaVerzija
{
    partial class DAL
    {
        public class UposlenikDAO : IDaoCrud<Uposlenik>
        {
            protected MySqlCommand komanda;

            public long create(Uposlenik entitet)
            {
                try
                {
                    komanda = new MySqlCommand("insert into Uposlenik values (@ime, @prezime, @jmbg, ToDate(@datumRodjenja, DD.MM.YYYY), @adresa, @brojTelefona, @sifra, @username, @procenatPlate, @strucnaSprema, ToDate(@datumZaposlenja, DD.MM.YYYY), @tip);", konekcija);
                    komanda.Parameters.AddWithValue("@ime", entitet.Ime);
                    komanda.Parameters.AddWithValue("@prezime", entitet.Prezime);
                    komanda.Parameters.AddWithValue("@jmbg", entitet.JMBG1);
                    komanda.Parameters.AddWithValue("@datumRodjenja", entitet.DatumRodjenja.ToShortDateString());
                    komanda.Parameters.AddWithValue("@adresa", entitet.AdresaStanovanja);
                    komanda.Parameters.AddWithValue("@brojTelefona", entitet.BrojTelefona);
                    komanda.Parameters.AddWithValue("@sifra", entitet.Sifra);
                    komanda.Parameters.AddWithValue("@username", entitet.Username);
                    komanda.Parameters.AddWithValue("@procenatPlate", entitet.ProcenatPlate);
                    komanda.Parameters.AddWithValue("@strucnaSprema", entitet.StrucnaSprema);
                    komanda.Parameters.AddWithValue("@datumZaposlenja", entitet.DatumZaposlenja.ToShortDateString());
                    komanda.Parameters.AddWithValue("@tip", entitet.Tip);
                    komanda.ExecuteNonQuery();
                    return komanda.LastInsertedId;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public Uposlenik read(Uposlenik entitet)
            {
                try
                {
                    komanda = new MySqlCommand("select * from Uposlenik where idUposlenik = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdOsobe);
                    MySqlDataReader citac = komanda.ExecuteReader();
                    Uposlenik uposlenik = null;
                    citac.Read();
                    uposlenik = new Uposlenik(citac.GetString("ime"), 
                                              citac.GetString("prezime"),
                                              citac.GetString("jmbg"),
                                              citac.GetDateTime("datumRodjenja"),
                                              citac.GetString("adresa"),
                                              citac.GetString("brojTelefona"),
                                              citac.GetString("sifra"),
                                              citac.GetString("username"),
                                              citac.GetFloat("procenatPlate"),
                                              citac.GetInt32("strucnaSprema"),
                                              citac.GetDateTime("datumZaposlenja"),
                                              citac.GetInt32("tip"),
                                              entitet.IdOsobe);
                    return uposlenik;

                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public Uposlenik getByUP(string username, string password)
            {
                try
                {
                    komanda = new MySqlCommand("select * from Uposlenik where username = @user and sifra = @pass;", konekcija);
                    komanda.Parameters.AddWithValue("@user", username);
                    komanda.Parameters.AddWithValue("@upass", password);
                    MySqlDataReader citac = komanda.ExecuteReader();
                    Uposlenik uposlenik = null;
                    citac.Read();
                    uposlenik = new Uposlenik(citac.GetString("ime"),
                                              citac.GetString("prezime"),
                                              citac.GetString("jmbg"),
                                              citac.GetDateTime("datumRodjenja"),
                                              citac.GetString("adresa"),
                                              citac.GetString("brojTelefona"),
                                              citac.GetString("sifra"),
                                              citac.GetString("username"),
                                              citac.GetFloat("procenatPlate"),
                                              citac.GetInt32("strucnaSprema"),
                                              citac.GetDateTime("datumZaposlenja"),
                                              citac.GetInt32("tip"),
                                              citac.GetInt32("idUposlenik"));
                    return uposlenik;

                }
                catch(Exception ex)
                {
                    throw ex;
                }
            }

            public Uposlenik update(Uposlenik entitet)
            {
                try
                {

                    komanda = new MySqlCommand("update Uposlenik set ime = @ime, prezime = @prezime, jmbg = @jmbg, datumRodjenja = ToDate(@datumRodjenja, DD.MM.YYYY), adresa = @adresa, brojTelefona = @brojTelefona, sifra = @sifra, username = @username, procenatPlate = @procenatPlate, strucnaSprema = @strucnaSprema, datumZaposlenja = ToDate(@datumZaposlenja, DD.MM.YYYY), tip = @tip where idUposlenik = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@ime", entitet.Ime);
                    komanda.Parameters.AddWithValue("@prezime", entitet.Prezime);
                    komanda.Parameters.AddWithValue("@jmbg", entitet.JMBG1);
                    komanda.Parameters.AddWithValue("@datumRodjenja", entitet.DatumRodjenja.ToShortDateString());
                    komanda.Parameters.AddWithValue("@adresa", entitet.AdresaStanovanja);
                    komanda.Parameters.AddWithValue("@brojTelefona", entitet.BrojTelefona);
                    komanda.Parameters.AddWithValue("@sifra", entitet.Sifra);
                    komanda.Parameters.AddWithValue("@username", entitet.Username);
                    komanda.Parameters.AddWithValue("@procenatPlate", entitet.ProcenatPlate);
                    komanda.Parameters.AddWithValue("@strucnaSprema", entitet.StrucnaSprema);
                    komanda.Parameters.AddWithValue("@datumZaposlenja", entitet.DatumZaposlenja.ToShortDateString());
                    komanda.Parameters.AddWithValue("@tip", entitet.Tip);
                    komanda.Parameters.AddWithValue("@id", entitet.IdOsobe);
                    komanda.ExecuteNonQuery();
                    return read(entitet);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public void delete(Uposlenik entitet)
            {
                try
                {
                    komanda = new MySqlCommand("delete from Uposlenik where idUposlenik = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdOsobe);
                    komanda.ExecuteNonQuery();
                }
                catch(Exception ex)
                {
                    throw ex;
                }
            }

            
        }


    }
}
